<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// 原型继承
  // 好处：子类 能 继承 父类的 实例方法
  // 缺点：子类 不能 继承 父类的 属性

// 借用继承
  // 好处：子类 “继承” 父类的 属性
  // 缺点：子类不能 继承父类的 实例方法

// 组合继承：原型继承 + 借用继承


function Person(name, height, weight) {
  this.name = name;
  this.height = height;
  this.weight = weight;
}

// 父类也有 原型方法
Person.prototype.sayHi = function() {
  console.log(`你好，我叫~${this.name}`);
}


function Teacher(major, name, height, weight) {
  Person.call(this, name, height, weight); // 借用继承
  this.major = major;
}

Teacher.prototype = new Person(); // 原型继承
Teacher.prototype.construcor = Teacher;

const laoWang = new Teacher('医学', '老王', '169cm', '66kg');

// 总结：组合继承
  // 好处：实现了 原型继承父类的实例方法；   实现了  组合继承父类的 属性值
  // 坏处：子类的 原型对象上，会有 父类 属性值，其value均为 undefined。（不影响 子类的 使用）
</script>